リスト:LASER Ver3.1プチコン プログラムリストタイトル:LASER Ver3.1 レーザーを撃つことを目的としたものです。 敵キャラ,衝突判定を盛り込みました。 Yボタンでレーザー撃てます。 Bボタンでオプション追加。 Aボタンでオプションが減ります。 Xボタンで終了します。 もちろん十字キー(スライドパッド)で移動できます。 敵キャラにレーザーを当てると色が変わります。 破壊はできません。 また、敵キャラの移動中は衝突判定をしていません。 移動中(自動補間)に色を変えると、移動が中断されてしまいます。 「一連のプログラム開発で分かったこと。」 このプログラムは処理落ち前提で作り始めました。 全体が均一に処理落ちすれば問題なく遊べるというか、昔のシューティングゲームは普通に処理落ちもゲーム性の一つとされていました。 そのためにスプライトの移動をまとめて行えるような作りになっています。 イメージとしては、必要な計算を全て終わらせて垂直帰線期間を待って画面を書き換える(実際に動かす)というような感じです。 結果、計算が間に合わなければ1フレームスキップ(処理落ち)します。 それに対して、プチコンで速度を稼ごうと思ったら処理を極力プチコンに渡してしまう必要があります。 スプライトに限って言えば、自動補間を利用してスプライトを移動するということです。 (プチコンは終点を指定しておけば、自動補間してスプライトを移動してくれます。) とても優れた機能ですが、今回のプログラムの構造からすると欠点になってしまいます。 レーザーを大量に撃つことによって処理落ちが発生しますが、自動補間による移動は処理落ちの影響を受けません。 (敵キャラの出現はカウンタによってタイミングを計っているいるので影響を受けます。出現間隔が変わるのはそのためですが移動速度は均一です。) 自機はコントローラー入力によって随時移動させています。 つまり、自機は処理落ちの影響を受け遅くなり、敵キャラは自動補間によって処理落ち無しで動作します。 結論としては・・・ 均一に処理落ちさせるには、すべてのスプライトを自力で動かす(1フレームごとに位置を指定すると言う意味)必要があります。 が、自動補間を積極的に利用した方が、ゴージャス(キャラが沢山)なゲームを作れる可能性が高くなります。 そして、自動補間を使うなら処理落ちは極力避けるようにするべきです。 ゲーム性に合わせて選択すれば良いのですが、BGでも自動補間が使えるので後者を選択した方が良いと思います。 即ち、「プチコンの仕組みに則って処理落ちがしない範囲で作る」ことが良いと思いました。 行き当たりばったりで来ましたが、とりあえずこのレーザーを撃つプログラムは役目を終えたかなと。 http://www43.tok2.com/home/ogut/index.html リスト作成に上記サイトの「PTC2HTML」を利用させていただいています。 001. ′Ver 3.1 002. ′テキ10タイ 003. ′Ver 3.0 004. ′テキシュツケ゛ン 005. ′Ver 2.1 006. ′BGニホシヲヒョウシ゛ 007. ′Ver 2.0 7コショリオチナシ 008. ′キ゛シ゛ヒ゛ットシフト 009. ACLS 010. CLEAR 011. VISIBLE 1,1,1,1,1,1 012. CLS:COLOR 0 013. ′GPAGE 0,0,0 014. 015. GOSUB @BGSET 016. GOSUB @BGSCR 017. 018. OPMAX=20 ′オフ゜ションノカス゛ 019. MID0=0 ′シ゛キノスフ゜ライトID0 020. MID1=OPMAX+1 ′シ゛キノスフ゜ライトID1 021. 022. ′LASERステ-タス シ゛キ+オフ゜ション 023. DIM LST(OPMAX+1,4) 024. FOR I=0 TO OPMAX 025. LST(I,0)=0 ′フラク゛ 026. LST(I,1)=0 ′ナカ゛サ 027. LST(I,2)=0 ′カイシX 028. LST(I,3)=0 ′カイシY 029. NEXT I 030. 031. ′テキキャラカンリヨウ 032. EM0=MID1+1 ′テキキャラカイシスフ゜ライトNo 033. EMC=0 ′テキキャラカウント 034. FRMCNT=0 ′テキシュツケ゛ンタイミンク゛ヨウ 035. 036. ′ク゛ラフィックショキセッテイ 037. GPAGE 0,0,0 038. GPRIO 2 039. 040. ′スフ゜ライトシ゛ュンヒ゛ 041. DIM SPK(100),SPP(100),SPH(100),SPV(100),SPI(100) 042. DIM SPF(100),SPX(100),SPY(100) 043. DIM SPA(100),SPX2(100),SPY2(100) ′コノ3ツハシンキホカント゛ウサヨウ 044. DIM SON(100) ′テキキャラシュツケ゛ンフラク゛トシテリヨウ 045. FOR I=0 TO 99 046. ′ SPF(I)=0 ′0:スキッフ゜ 1:シンキ 2:イト゛ウ 3:ヘンコウ 4:シュウキョ 047. SPF(I)=-1 ′-1:ムシ? 0:スキッフ゜ 1:シンキ 2:シンキ(ホカンアリ) 3:イト゛ウ 4:イト゛ウ(ホカンアリ) 5:ヘンコウ 6:シュウキョ 048. NEXT I 049. ′シ゛キセッテイ 050. SPK(MID0)=256 051. SPP(MID0)=2 052. SPH(MID0)=0 053. SPV(MID0)=0 054. SPI(MID0)=0 055. SPF(MID0)=1 056. SPX(MID0)=100 057. SPY(MID0)=100 058. SPK(MID1)=257 059. SPP(MID1)=2 060. SPH(MID1)=0 061. SPV(MID1)=0 062. SPI(MID1)=0 063. SPF(MID1)=1 064. SPX(MID1)=116 065. SPY(MID1)=100 066. 067. ′オフ゜ション 068. OPW=8 ′オフ゜ションノウエイト 069. DIM OP(OPW*OPMAX,2) ′オフ゜ショヨウエイトテ-フ゛ル X,Y 070. OPC=0 ′ヒョウシ゛チュウノオフ゜ションスウ 071. FOR I=1 TO OPMAX 072. SPK(I)=200 073. SPP(I)=5 074. SPH(I)=0 075. SPV(I)=0 076. SPI(I)=0 077. SPF(I)=-1 078. SPX(I)=0 079. SPY(I)=0 080. NEXT I 081. 082. SPCNT=EM0-1 ′スフ゜ライトサイタ゛イスウ 083. 084. ′オフ゜ションサ゛ヒョウテ-フ゛ル 0:X 1:Y 085. DIM OP$(2) 086. 087. ′GOSUB @TEKIINT 088. GOSUB @SPWRITE 089. 090. @MLOOP 091. ′ニュウリョク 092. XX=0:YY=0 093. BTN=BUTTON(0) 094. 095. IF BTN AND 64 GOTO @EXIT ′Xホ゛タン 096. IF BTN AND 128 THEN SHOT=1 ′Yホ゛タン 097. IF BTN AND 1 THEN YY=-2 ′ウエ 098. IF BTN AND 2 THEN YY=2 ′シタ 099. IF BTN AND 4 THEN XX=-2 ′ヒタ゛リ 100. IF BTN AND 8 THEN XX=2 ′ミキ゛ 101. 102. ′レンソ゛クシテニュウリョクサレナイヨウニフラク゛テ゛セイキ゛ョスル 103. IF BTN AND 16 THEN AB=1 ELSE AB=0 ′Aホ゛タン 104. IF AB==0 THEN AFLG=1 105. IF BTN AND 32 THEN BB=1 ELSE BB=0 ′Bホ゛タン 106. IF BB==0 THEN BFLG=1 107. 108. IF XX!=0 OR YY!=0 THEN GOSUB @MYMOVE 109. 110. IF SHOT==0 GOTO @SHOTSKIP 111. FOR I=0 TO OPC 112. LST(I,0)=1 113. NEXT 114. SHOT=0 115. @SHOTSKIP 116. 117. ′オフ゜ション Aホ゛タン=ヘラス Bホ゛タン=フヤス 118. IF AFLG AND AB THEN OPADD=-1 119. IF BFLG AND BB THEN OPADD=1 120. IF OPADD!=0 THEN GOSUB @OPTION 121. 122. WAIT 1 123. ′GOSUB @SPWRITE 124. GOSUB @LASER 125. GOSUB @SPWRITE 126. GOSUB @BGSCR 127. GOSUB @TEKI 128. FRMCNT=FRMCNT+1 129. GOTO @MLOOP 130. 131. 132. @OPTION 133. IF OPADD==-1 GOTO @OPTMI 134. ′オフ゜ションツイカ 135. BFLG=0 136. IF OPC==OPMAX GOTO @OPEND 137. OPC=OPC+1 138. OPX=SPX(OPC-1) 139. IF OPC==1 THEN OPX=OPX+4 140. OPY=SPY(OPC-1) 141. ′ツイカシタ オフ゜ションノ イチ 142. OP$(0)=OP$(0)+CHR$(OPX)*OPW 143. OP$(1)=OP$(1)+CHR$(OPY)*OPW 144. ′スフ゜ライト 145. SPX(OPC)=OPX 146. SPY(OPC)=OPY 147. SPF(OPC)=1 148. GOTO @OPEND 149. @OPTMI 150. AFLG=0 151. IF OPC==0 GOTO @OPEND 152. SPF(OPC)=6 153. OPC=OPC-1 154. @OPEND 155. OPADD=0 156. RETURN 157. 158. @EXIT 159. ACLS 160. PRINT”シュウリョウ 161. END 162. 163. @MYMOVE 164. ′シ゛キノイト゛ウ 165. SPX(MID0)=SPX(MID0)+XX 166. IF SPX(MID0)<0 THEN SPX(MID0)=0 167. IF SPX(MID0)>223 THEN SPX(MID0)=223 168. SPY(MID0)=SPY(MID0)+YY 169. IF SPY(MID0)<0 THEN SPY(MID0)=0 170. IF SPY(MID0)>175 THEN SPY(MID0)=175 171. SPF(MID0)=3 172. SPX(MID1)=SPX(MID0)+16 173. SPY(MID1)=SPY(MID0) 174. SPF(MID1)=3 175. ′オフ゜ションイト゛ウ 176. IF OPC==0 GOTO @OPMVSKIP 177. ′オフ゜ションウエイトテ-フ゛ルヲ1ツスライト゛ 178. OPWORK=OPW*OPC-1 179. ′サイコ゛1モシ゛キリトル 180. ′セントウニ シ゛キノイチヲイレル 181. OP$(0)=CHR$(SPX(MID0)+4)+LEFT$(OP$(0),OPWORK) 182. OP$(1)=CHR$(SPY(MID0))+LEFT$(OP$(1),OPWORK) 183. 184. ′オフ゜ツョンスフ゜ライトニハンエイ 185. FOR I=1 TO OPC 186. IF SPF(I)!=-1 GOTO @OPHSKIP ′ツイカ、サクシ゛ョサレタモノハトハ゛ス 187. SPX(I)=ASC(MID$(OP$(0),I*OPW-1,1)) 188. SPY(I)=ASC(MID$(OP$(1),I*OPW-1,1)) 189. SPF(I)=3 190. @OPHSKIP 191. NEXT 192. @OPMVSKIP 193. RETURN 194. 195. ′---スフ゜ライトカキカエ 196. @SPWRITE 197. FOR J=0 TO SPCNT 198. SN=J 199. ′PRINT ”DB ”,SPF(J),” ===” 200. ON SPF(J) GOSUB @SPSKIP,@SPNEW,@SPNEW2,@SPMOVE,@SPMOVE2,@SPCHANG,@SPDEL 201. NEXT 202. RETURN 203. 204. @SPSKIP ′ナニモシナイ 205. ′シ゛ッサイニハココニハコナイ 206. ′PRINT ”DB SPSKIP” 207. RETURN 208. 209. @SPNEW 210. SPSET SN,SPK(SN),SPP(SN),SPH(SN),SPV(SN),SPI(SN) 211. SON(SN)=1 212. ′SPF(SN)=-1 213. GOSUB @SPMOVE 214. RETURN 215. 216. @SPNEW2 217. SPSET SN,SPK(SN),SPP(SN),SPH(SN),SPV(SN),SPI(SN) 218. SON(SN)=1 219. ′SPF(SN)=-1 220. GOSUB @SPMOVE 221. GOSUB @SPMOVE2 222. RETURN 223. 224. @SPMOVE 225. SPOFS SN,SPX(SN),SPY(SN) 226. SPF(SN)=-1 227. RETURN 228. 229. @SPMOVE2 ′ホカント゛ウサアリ 230. IF SPCHK(SN)==0 THEN SPOFS SN,SPX2(SN),SPY2(SN),SPA(SN) 231. ′SPOFS SN,SPX2(SN),SPY2(SN),SPA(SN) 232. SPF(SN)=-1 233. RETURN 234. 235. @SPCHANG 236. ′テストヨウ 237. SPP(SN)=SPP(SN)+1 238. IF SPP(SN)>15 THEN SPP(SN)=0 239. SPCHR SN,SPK(SN),SPP(SN),SPH(SN),SPV(SN),SPI(SN) 240. SPF(SN)=-1 241. RETURN 242. 243. @SPDEL 244. SON(SN)=0 245. SPCLR SN 246. SPF(SN)=-1 247. RETURN 248. 249. @LASER 250. FOR K=0 TO OPC 251. IF LST(K,0)==0 GOTO @LANEXT 252. ′フルイレ-サ゛-ヲケス 253. ′ナカ゛サ0ナラフルイレ-サ゛-ハナイ 254. IF LST(K,1)==0 GOTO @LASK1 255. LEND=LST(K,2)+LST(K,1) 256. IF LEND>255 THEN LEND=255 257. GLINE LST(K,2),LST(K,3),LEND,LST(K,3),0 258. @LASK1 259. ′アタラシイレ-サ゛- 260. ′ナカ゛サカ゛220ヲコケタフ゛ンハ スキマニナル 261. LST(K,1)=LST(K,1)+15 262. LST(K,2)=SPX(K)+28 ′(32-4) 263. IF K!=0 THEN LST(K,2)=LST(K,2)-4 264. LST(K,3)=SPY(K)+8 265. IF LST(K,1)>220 THEN LST(K,2)=LST(K,2)+(LST(K,1)-220) 266. IF LST(K,2)<=255 THEN GOTO @LDRAW 267. ′カ゛メンカ゛イニテ゛タ 268. LST(K,0)=0 269. LST(K,1)=0 270. GOTO @LANEXT 271. @LDRAW 272. LEND=LST(K,2)+LST(K,1) 273. IF LEND>255 THEN LEND=255 274. GLINE LST(K,2),LST(K,3),LEND,LST(K,3),6 275. ′テキトノショウトツハンテイ 276. II=EM0+EMC 277. FOR I=EM0 TO II 278. IF SON(I)==0 GOTO @ATASK 279. ′イト゛ウチュウニ イロヲカエルト トマッテシマウ 280. ′イト゛ウチュウノモノハ ココテ゛ ツ゛ョカ゛イ 281. IF SPCHK(I)!=0 GOTO @ATASK 282. IF SPHITRC(I,LST(K,2),LST(K,3)-4,LST(K,1),8) THEN SPF(I)=5 283. @ATASK 284. NEXT 285. @LANEXT 286. NEXT 287. RETURN 288. 289. 290. ′--BGノショリ-- 291. @BGSET ′BGニハイケイヲヒ゛ョウカ゛ 292. BGPAGE 0 293. FOR I=0 TO 63 294. FOR J=0 TO 23 295. BGPUT 1,I,J,928,0,0,0 ′マックラ 296. ′メント゛ウナノテ゛ランタ゛ムテ゛ホシヲタ゛ス 297. RN1=RND(16) 298. RN2=RND(2) 299. IF RN2==0 THEN HOSHI=859 ELSE HOSHI=891 300. IF RN1==0 THEN BGPUT 1,I,J,HOSHI,0,0,0 301. NEXT 302. NEXT 303. RETURN 304. 305. @BGSCR 306. IF BGCHK(1)!=0 GOTO @BGSSK ′ホカンシ゛ョウタイナラ スキッフ゜ 307. BGOFS 1,0,0 308. BGOFS 1,511,0,1024 309. @BGSSK 310. RETURN 311. 312. ′--テキキャラ-- 313. @TEKIINT ′テキキャラシ゛ュンヒ゛ 314. FOR I=0 TO 9 315. SN=EM0+I 316. SPK(SN)=174 317. SPP(SN)=0 318. SPH(SN)=0 319. SPV(SN)=0 320. SPI(SN)=2 321. SPX(SN)=255 322. SPY(SN)=18*I 323. SPA(SN)=76 324. SPX2(SN)=180 325. SPY2(SN)=SPY(SN) 326. SPF(SN)=-1 327. SON(SN)=0 328. NEXT 329. EMC=10 330. SPCNT=EM0+EMC 331. RETURN 332. 333. @TEKI ′テキト゛ウサ 334. ′シュツケ゛ン 335. IF FRMCNT%10!=0 GOTO @TKSK1 336. TID=FRMCNT/10 337. IF TID==0 OR TID>10 GOTO @TKSK1 338. SPF(EM0+TID-1)=2 339. ′SON(EM0+TID-1)=1 340. @TKSK1 341. ′タイキャク SPK=174ノモノ 342. IF FRMCNT==400 THEN GOSUB @TEKITAI 343. ′ショキカ 344. IF FRMCNT>511 THEN FRMCNT=0 345. IF FRMCNT==0 THEN GOSUB @TEKIINT 346. RETURN 347. 348. @TEKITAI ′テキタイキャクショリ 349. FOR I=0 TO 9 350. II=EM0+I 351. SON(II)=0 352. IF SPK(II)!=174 GOTO @TTSK1 353. ′SPKカ゛174ノモノハ イキテイル 354. SPX2(II)=256 355. SPF(II)=4 356. @TTSK1 357. NEXT 358. RETURN 359. 360. ジャンル別一覧
人気のクチコミテーマ
|